{
 "cells": [
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "# KNN实验（MNIST & CIFAR-10）\n",
    "#本实验将使用K近邻（KNN）模型对MNIST和CIFAR-10数据集进行分类任务，分析其表现并进行可视化。"
   ],
   "id": "e9f87cbd5cfea937"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-11T00:40:12.844574Z",
     "start_time": "2025-06-11T00:40:09.516564Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.metrics import accuracy_score, confusion_matrix\n",
    "import torchvision\n",
    "import torchvision.transforms as transforms"
   ],
   "id": "af1dd0fa9c5d775e",
   "outputs": [],
   "execution_count": 1
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "# 加载数据集",
   "id": "8ddcbefcc1008fcd"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-11T00:40:14.225594Z",
     "start_time": "2025-06-11T00:40:12.844574Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def load_mnist():\n",
    "    transform = transforms.Compose([\n",
    "        transforms.ToTensor(),\n",
    "        transforms.Normalize((0.5,), (0.5,))\n",
    "    ])\n",
    "    trainset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)\n",
    "    testset = torchvision.datasets.MNIST(root='./data', train=False, download=True, transform=transform)\n",
    "    return trainset, testset\n",
    "\n",
    "def load_cifar10():\n",
    "    transform = transforms.Compose([\n",
    "        transforms.ToTensor(),\n",
    "        transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))\n",
    "    ])\n",
    "    trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)\n",
    "    testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=True, transform=transform)\n",
    "    return trainset, testset\n",
    "\n",
    "def dataset_to_numpy(dataset, flatten=True):\n",
    "    X = []\n",
    "    y = []\n",
    "    for img, label in dataset:\n",
    "        arr = img.numpy()\n",
    "        if flatten:\n",
    "            arr = arr.flatten()\n",
    "        else:\n",
    "            arr = arr.transpose(1, 2, 0)\n",
    "        X.append(arr)\n",
    "        y.append(label)\n",
    "    X = np.array(X)\n",
    "    y = np.array(y)\n",
    "    return X, y\n",
    "\n",
    "mnist_train, mnist_test = load_mnist()\n",
    "cifar_train, cifar_test = load_cifar10()\n",
    "print(f\"MNIST训练集样本数: {len(mnist_train)}，测试集样本数: {len(mnist_test)}\")\n",
    "print(f\"CIFAR-10训练集样本数: {len(cifar_train)}，测试集样本数: {len(cifar_test)}\")"
   ],
   "id": "1ccd69c60d2e9a77",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MNIST训练集样本数: 60000，测试集样本数: 10000\n",
      "CIFAR-10训练集样本数: 50000，测试集样本数: 10000\n"
     ]
    }
   ],
   "execution_count": 2
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "# 数据预处理",
   "id": "afa38571d382bffe"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-11T00:40:25.270005Z",
     "start_time": "2025-06-11T00:40:14.428033Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# MNIST\n",
    "X_train_m, y_train_m = dataset_to_numpy(mnist_train)\n",
    "X_test_m, y_test_m = dataset_to_numpy(mnist_test)\n",
    "# CIFAR-10\n",
    "X_train_c, y_train_c = dataset_to_numpy(cifar_train)\n",
    "X_test_c, y_test_c = dataset_to_numpy(cifar_test)\n",
    "# 只取部分样本\n",
    "n_samples = 2000  # KNN较慢，减少样本数\n",
    "X_train_m, y_train_m = X_train_m[:n_samples], y_train_m[:n_samples]\n",
    "X_test_m, y_test_m = X_test_m[:500], y_test_m[:500]\n",
    "X_train_c, y_train_c = X_train_c[:n_samples], y_train_c[:n_samples]\n",
    "X_test_c, y_test_c = X_test_c[:500], y_test_c[:500]\n",
    "# 标准化\n",
    "scaler_m = StandardScaler().fit(X_train_m)\n",
    "X_train_m = scaler_m.transform(X_train_m)\n",
    "X_test_m = scaler_m.transform(X_test_m)\n",
    "scaler_c = StandardScaler().fit(X_train_c)\n",
    "X_train_c = scaler_c.transform(X_train_c)\n",
    "X_test_c = scaler_c.transform(X_test_c)"
   ],
   "id": "25cc5aa7cf19e933",
   "outputs": [],
   "execution_count": 3
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "# KNN模型训练与评估",
   "id": "f2ee19ca6d97a955"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-11T00:40:25.578257Z",
     "start_time": "2025-06-11T00:40:25.280140Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def train_and_evaluate(model, X_train, y_train, X_test, y_test):\n",
    "    model.fit(X_train, y_train)\n",
    "    y_pred = model.predict(X_test)\n",
    "    acc = accuracy_score(y_test, y_pred)\n",
    "    cm = confusion_matrix(y_test, y_pred)\n",
    "    return acc, cm, y_pred\n",
    "\n",
    "# MNIST\n",
    "knn_mnist = KNeighborsClassifier()\n",
    "acc_m, cm_m, y_pred_m = train_and_evaluate(knn_mnist, X_train_m, y_train_m, X_test_m, y_test_m)\n",
    "print(f\"MNIST KNN准确率: {acc_m:.3f}\")\n",
    "# CIFAR-10\n",
    "knn_cifar = KNeighborsClassifier()\n",
    "acc_c, cm_c, y_pred_c = train_and_evaluate(knn_cifar, X_train_c, y_train_c, X_test_c, y_test_c)\n",
    "print(f\"CIFAR-10 KNN准确率: {acc_c:.3f}\")"
   ],
   "id": "53e095982f7f9b44",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MNIST KNN准确率: 0.816\n",
      "CIFAR-10 KNN准确率: 0.236\n"
     ]
    }
   ],
   "execution_count": 4
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "# 可视化分析",
   "id": "244802fde1894ec"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-11T00:40:25.947741Z",
     "start_time": "2025-06-11T00:40:25.627858Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 准确率柱状图\n",
    "plt.figure(figsize=(5,4))\n",
    "plt.bar(['MNIST', 'CIFAR-10'], [acc_m, acc_c])\n",
    "plt.ylabel('Accuracy')\n",
    "plt.title('KNN在不同数据集上的准确率')\n",
    "plt.show()\n",
    "# 混淆矩阵\n",
    "fig, axes = plt.subplots(1,2, figsize=(12,5))\n",
    "axes[0].imshow(cm_m, cmap=plt.cm.Blues)\n",
    "axes[0].set_title('MNIST 混淆矩阵')\n",
    "axes[1].imshow(cm_c, cmap=plt.cm.Blues)\n",
    "axes[1].set_title('CIFAR-10 混淆矩阵')\n",
    "for ax in axes:\n",
    "    ax.set_xlabel('Predicted')\n",
    "    ax.set_ylabel('True')\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ],
   "id": "2c6651151492b9c5",
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 22312 (\\N{CJK UNIFIED IDEOGRAPH-5728}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 19981 (\\N{CJK UNIFIED IDEOGRAPH-4E0D}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 21516 (\\N{CJK UNIFIED IDEOGRAPH-540C}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 25968 (\\N{CJK UNIFIED IDEOGRAPH-6570}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 25454 (\\N{CJK UNIFIED IDEOGRAPH-636E}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 38598 (\\N{CJK UNIFIED IDEOGRAPH-96C6}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 19978 (\\N{CJK UNIFIED IDEOGRAPH-4E0A}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30340 (\\N{CJK UNIFIED IDEOGRAPH-7684}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 20934 (\\N{CJK UNIFIED IDEOGRAPH-51C6}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30830 (\\N{CJK UNIFIED IDEOGRAPH-786E}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 29575 (\\N{CJK UNIFIED IDEOGRAPH-7387}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 500x400 with 1 Axes>"
      ],
      "image/png": "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HAAAAwQkAAAGCEgAAAwQkAAAGCAgAQAwQEACAGCAgAQAwAABCQCAAQISAAADBCQAAAYISAAADBCQAAAYICABADBAQAIAYICABADAAAEJAIABAhIAAAMEJAAABghIAAAMEJAAABggIAEAMEBAAgBggIAEAMAAAQkAgAFTA7KmpkazZs1SXFyc4uPjlZWV1WTfu+++WxERER7/tm/f3o7VAgA6EquZK8/MzFRxcbGys7NVVlamGTNmqHv37ho1alSjvp999pmefPJJXX755e62zp07t2e5AIAOxLSArKysVG5urlauXKno6GhFR0dr//79ysnJaRSQtbW1+uabb2S329WtWzeTKgYAdCSmHWItKSmR0+lUTEyMuy02NlZ79+5VXV2dR9/PP/9cPj4+Ov/889u7TABAB+V1QM6YMUPvvPOOXC5Xq1bscDgUHBwsPz8/d1toaKhqampUUVHh0ffzzz9XYGCgHnroIcXHx+v666/X22+/3ar1AwBwPF4fYg0MDFRqaqqOHj2qhIQEjRkzRoMGDZKPj49X81RVVXmEoyT3cm1trUf7559/rurqasXHx2vq1Kl68803dffdd+vFF1+U3W73ar2tDXaLxdKq8UBLtHa7xamj4XfJ79Qc3jzvXgfk7Nmz9fDDD+vvf/+7tmzZogceeECSNHr0aF199dUaOHBgs+bx9/dvFIQNywEBAR7t06ZN08SJE90n5fTr10/79u3TSy+95HVAFhUVedX/39lsNkVFRbV4PNBSpaWlqqqqMrsMtKHWvBehfbToJB0fHx9ddtlluuyyy3T//fdr1apV+tvf/qbnn39e3bt314QJE3TbbbfJ39+/yTnCwsJUXl4up9Mpq/VYGQ6HQwEBAQoKCvLo6+vr2+iM1QsvvFAHDhzwuna73c5eIE47ERERZpeANuJyuVRUVMR7kUkanv/maFFAHjlyRNu3b9eWLVv03nvvKSwsTH/84x81ZswYORwOLViwQB999JFWr17d5ByRkZGyWq3as2eP4uLiJEkFBQWy2+3y9fX8aHTmzJny8fHR/Pnz3W0lJSXq27ev17VbLBY2Spx22GbPPLwXnfq8Dsi7775b77//voKCgjR69Gg999xzuvjii92P9+3bV4cOHVJqaupx57HZbEpMTFRaWpoef/xxff/998rKynKHoMPhUKdOnRQQEKBhw4bp/vvv16BBgxQTE6ONGzeqoKBA8+bN87Z8AACaxeuADA0N1fLly497Yk5cXJxyc3NPOFdKSorS0tI0adIkBQYGKjk5WQkJCZKk+Ph4zZ8/X+PHj1dCQoLmzp2rpUuXqqysTBdddJFWrVqlnj17els+AADN4lNfX1/v7aCcnBx17txZY8eOlSTdc889io+P10033dTmBbYVl8ulPXv2aODAga0+rHH1X9/VvrJDbVQZ0LTo7kHadO8Qs8tAG2rL9yJ4z5vn3+vvQT799NNatmyZzj77bHfboEGD9Oyzz2rJkiXeVwsAwCnI64Bct26dnn76aQ0bNszdlpSUpAULFujFF19s0+IAADCL1wFZVVWlwMDARu3BwcH65Zdf2qQoAADM5nVADhkyRI899pjKysrcbd99950yMjIUHx/fpsUBAGAWrwNyzpw5Onr0qIYPH67Bgwdr8ODB+u///m/V1dVpzpw5J6NGAADanddf8wgJCdHatWtVUlKiL7/8UlarVRdccIH69OlzMuoDAMAULbqSjtPpVHBwsPuScPX19friiy/0j3/8Q2PGjGnTAgEAMIPXAZmfn6/Zs2c3uiWVJHXr1o2ABACcEbz+DHLhwoUaOXKkNm3apKCgIK1du1bLli1Tjx499Kc//ekklAgAQPvzeg/y4MGDWr58uXr16qX+/fvL4XBoxIgR8vX1VWZmpsaPH38y6gQAoF15vQcZFBTkvi/db37zG5WUlEg6dvupb775pm2rAwDAJF4H5JVXXqn09HQdOHBAgwYN0oYNG7Rv3z69+OKLOvfcc09GjQAAtDuvAzI1NVXh4eEqLi7WiBEjNGDAAF1//fXKycnRjBkzTkaNAAC0O68/g9yxY4ceeughBQcHS5IWLFigtLQ0+fv766yzzmrzAgEAMIPXe5Dp6ekqLy/3aAsMDCQcAQBnFK8DctCgQXrttddUW1t7MuoBAOCU4PUh1h9//FHPPvusli1bppCQEPn7+3s8/tZbb7VZcQAAmMXrgJwwYYImTJhwMmoBAOCU4XVAjhs37mTUAQDAKcXrgJw4caJ8fHyafPy5555rVUEAAJwKvA7IQYMGeSw7nU4dPHhQb7/9tu6+++42KwwAADN5HZDTp083bF+/fr22bt2qyZMnt7ooAADM5vXXPJpy6aWX6oMPPmir6QAAMJXXe5BlZWWN2o4cOaLVq1erR48ebVIUAABm8zoghw0bJh8fH9XX17tP1qmvr9d5552nxx9/3Ku5ampqlJ6erq1btyogIEC33367br/99uOO+eabb3TNNddo2bJljT4PBQCgrXgdkP95IQAfHx+dddZZCg0NPe7ZrUYyMzNVXFys7OxslZWVacaMGerevbtGjRrV5Ji0tDRVVlZ6WzYAAF7x+jPIHj16aMeOHdq9e7d69Oih7t27Kz09XWvXrvVqnsrKSuXm5io1NVXR0dEaOXKkpkyZopycnCbHvPrqqzpy5Ii3JQMA4DWvA/Lpp5/W0qVLdfbZZ7vbLrvsMj377LNasmRJs+cpKSmR0+lUTEyMuy02NlZ79+5VXV1do/7l5eV68sknNW/ePG9LBgDAa14fYl23bp3+8pe/KC4uzt2WlJSkiIgIPfjgg7rnnnuaNY/D4VBwcLD8/PzcbaGhoaqpqVFFRYVCQkI8+j/xxBMaN26cLrroIm9L9uByuVo13mKxtGo80BKt3W5x6mj4XfI7NYc3z7vXAVlVVaXAwMBG7cHBwfrll1+8muffw1GSe/k/7xTy/vvvq6CgQK+99pq35TZSVFTU4rE2m01RUVGtrgHwVmlpqaqqqswuA22oNe9FaB9eB+SQIUP02GOPKSMjQ927d5ckfffdd8rIyFB8fHyz5/H3928UhA3LAQEB7rbq6mrNmTNHc+fO9WhvKbvdzl4gTjsRERFml4A24nK5VFRUxHuRSRqe/+bwOiDnzJmjadOmadiwYerSpYskqaKiQoMHD9bcuXObPU9YWJjKy8vldDpltR4rw+FwKCAgQEFBQe5+hYWFOnjwoO69916P8XfccYcSExO9/kzSYrGwUeK0wzZ75uG96NTndUCGhIRo7dq1Ki0t1RdffCGr1aoLLrhAffr08WqeyMhIWa1W7dmzx/15ZkFBgex2u3x9fz136OKLL9bWrVs9xiYkJOjRRx/VFVdc4W35AAA0i9cBWVtbq7/85S/q0aOHbrnlFknS+PHj9dvf/lb33XefzjrrrGbNY7PZlJiYqLS0ND3++OP6/vvvlZWVpfnz50s6tjfZqVMnBQQEKDw8vNH4sLAwde3a1dvyAQBoFq+/5vHoo4/q7bffVr9+/dxt06ZN044dO5SRkeHVXCkpKYqOjtakSZOUnp6u5ORkJSQkSJLi4+O1efNmb8sDAKBNeL0HuXXrVv3tb39TZGSku23EiBEKCwvTnXfeqYcffrjZc9lsNmVkZBgGa2lpaZPjjvcYAABtwes9yPr6etXU1Bi2Hz16tE2KAgDAbF4H5FVXXaXZs2fr448/VmVlpSorK/XJJ58oLS1NI0aMOBk1AgDQ7rw+xJqSkqLU1FRNmjRJdXV1qq+vl9VqVWJiYrOvogMAwKnO64C02Wx66qmndOjQIX311VdyuVz68ssvtXHjRo0YMUL79u07GXUCANCuvA7IBvv371deXp62bNmiw4cPq3fv3po1a1Zb1gYAgGm8Csh//etfysvL04YNG3Tw4EEFBQXp8OHDWrhwocaMGXOyagQAoN01KyDXrVunvLw8ffzxxzr33HM1bNgwJSQk6NJLL9WAAQPUt2/fk10nAADtqlkBmZqaqvDwcGVkZOjaa6892TUBAGC6Zn3N4/HHH1fPnj2VkpKiyy+/XCkpKXrrrbcMvw8JAMCZoFl7kOPHj9f48eP1008/6fXXX9fmzZs1ffp0BQQEqK6uTrt27VJ4eHizr8MKAMCpzqsLBYSEhOiWW25RTk6Otm/frnvuuUeRkZF65JFHNGTIEPeFxgEAON15fSWdBv/1X/+lKVOmaP369dqyZYtuvfVWvfvuu21ZGwAApmlxQP67Cy64QNOnT+fuGwCAM0abBCQAAGcaAhIAAAMEJAAABghIAAAMEJAAABggIAEAMEBAAgBggIAEAMAAAQkAgAECEgAAAwQkAAAGTA3ImpoazZo1S3FxcYqPj1dWVlaTfV999VVdddVVuvjii3XjjTeqsLCwHSsFAHQ0pgZkZmamiouLlZ2drblz52rx4sXasmVLo34ff/yxUlNTNW3aNG3atEkxMTG64447dOTIEROqBgB0BKYFZGVlpXJzc5Wamqro6GiNHDlSU6ZMUU5OTqO+DodD06ZN03XXXafzzz9f99xzjyoqKvTZZ5+ZUDkAoCOwmrXikpISOZ1OxcTEuNtiY2O1bNky1dXVydf31+wePXq0+//V1dVas2aNunbtqt69e7drzQCAjsO0gHQ4HAoODpafn5+7LTQ0VDU1NaqoqFBISEijMR988IFuv/121dfXa8GCBTrnnHO8Xq/L5WpV3RaLpVXjgZZo7XaLU0fD75LfqTm8ed5NC8iqqiqPcJTkXq6trTUcc9FFF2n9+vXavn27Zs6cqZ49e2rgwIFerbeoqKhF9UqSzWZTVFRUi8cDLVVaWqqqqiqzy0Abas17EdqHaQHp7+/fKAgblgMCAgzHhIaGKjQ0VJGRkdq7d6/Wrl3rdUDa7Xb2AnHaiYiIMLsEtBGXy6WioiLei0zS8Pw3h2kBGRYWpvLycjmdTlmtx8pwOBwKCAhQUFCQR9/CwkJZLBZFR0e723r37t2ik3QsFgsbJU47bLNnHt6LTn2mncUaGRkpq9WqPXv2uNsKCgpkt9s9TtCRpJdffllPPfWUR9u+fft04YUXtkepAIAOyLSAtNlsSkxMVFpamgoLC5Wfn6+srCwlJSVJOrY3WV1dLUn6wx/+oA8//FDZ2dn68ssv9de//lWFhYW67bbbzCofAHCGM/VCASkpKYqOjtakSZOUnp6u5ORkJSQkSJLi4+O1efNmSVJ0dLQWL16sl19+Wddee63efvttrV69WmFhYWaWDwA4g5n2GaR0bC8yIyNDGRkZjR4rLS31WB46dKiGDh3aXqUBADo4LlYOAIABAhIAAAMEJAAABghIAAAMEJAAABggIAEAMEBAAgBggIAEAMAAAQkAgAECEgAAAwQkAAAGCEgAAAwQkAAAGCAgAQAwQEACAGCAgASAdmaz2cwuAc1AQAJoMVddvdklnHYsFouioqJksVjMLuW01J7bnLXd1gTgjGPx9dF9a3frwPeHzS4FHUCfcwP1zI0x7bY+AhJAqxz4/rD2lR0yuwygzXGIFQAAAwQkAAAGCEgAAAwQkAAAGCAgAQAwYGpA1tTUaNasWYqLi1N8fLyysrKa7Ltjxw5dd911iomJ0TXXXKO33nqrHSsFAHQ0pgZkZmamiouLlZ2drblz52rx4sXasmVLo34lJSWaPn26fv/73ysvL0833nij7rvvPpWUlJhQNQCgIzDte5CVlZXKzc3VypUrFR0drejoaO3fv185OTkaNWqUR9/XXntNgwcPVlJSkiQpPDxc27Zt0+uvv65+/fqZUT4A4AxnWkCWlJTI6XQqJubXqyLExsZq2bJlqqurk6/vrzu348aN09GjRxvN8csvv7RLrQCAjse0gHQ4HAoODpafn5+7LTQ0VDU1NaqoqFBISIi7vXfv3h5j9+/frw8++EA33nij1+t1uVwtL1ri+okwRWu325OF1wPM0JrXgzdjTQvIqqoqj3CU5F6ura1tctxPP/2k5ORkXXLJJRo+fLjX6y0qKvJ6TAObzaaoqKgWjwdaqrS0VFVVVWaX4YHXA8zSXq8H0wLS39+/URA2LAcEBBiO+eGHH/THP/5R9fX1+utf/+pxGLa57HY7f/XitBMREWF2CcApozWvB5fL1ewdJdMCMiwsTOXl5XI6nbJaj5XhcDgUEBCgoKCgRv2/++4790k6zz33nMchWG9YLBYCEqcdtlngV+31ejDtax6RkZGyWq3as2ePu62goEB2u73RnmFlZaWmTJkiX19fPf/88woLC2vnagEAHY1pAWmz2ZSYmKi0tDQVFhYqPz9fWVlZ7r1Eh8Oh6upqSdLy5cv19ddfKyMjw/2Yw+HgLFYAwElj6v0gU1JSlJaWpkmTJikwMFDJyclKSEiQJMXHx2v+/PkaP3683njjDVVXV+uGG27wGD9u3Dg98cQTZpQOADjDmRqQNptNGRkZ7j3Df1daWur+v9HVdQAAOJm4WDkAAAYISAAADBCQAAAYICABADBAQAIAYICABADAAAEJAIABAhIAAAMEJAAABghIAAAMEJAAABggIAEAMEBAAgBggIAEAMAAAQkAgAECEgAAAwQkAAAGCEgAAAwQkAAAGCAgAQAwQEACAGCAgAQAwAABCQCAAQISAAADpgZkTU2NZs2apbi4OMXHxysrK+uEYz7++GMNHz68HaoDAHRkVjNXnpmZqeLiYmVnZ6usrEwzZsxQ9+7dNWrUKMP+paWluu++++Tv79/OlQIAOhrT9iArKyuVm5ur1NRURUdHa+TIkZoyZYpycnIM+69du1Y33nijunbt2s6VAgA6ItMCsqSkRE6nUzExMe622NhY7d27V3V1dY36v/POO8rIyNBtt93WjlUCADoq0w6xOhwOBQcHy8/Pz90WGhqqmpoaVVRUKCQkxKP/s88+K0lav359q9brcrlaNd5isbRqPNASrd1uTxZeDzBDa14P3ow1LSCrqqo8wlGSe7m2tvakrbeoqKjFY202m6KiotqwGqB5SktLVVVVZXYZHng9wCzt9XowLSD9/f0bBWHDckBAwElbr91u569enHYiIiLMLgE4ZbTm9eByuZq9o2RaQIaFham8vFxOp1NW67EyHA6HAgICFBQUdNLWa7FYCEicdthmgV+11+vBtJN0IiMjZbVatWfPHndbQUGB7Ha7fH25fgEAwFymJZHNZlNiYqLS0tJUWFio/Px8ZWVlKSkpSdKxvcnq6mqzygMAdHCm7qqlpKQoOjpakyZNUnp6upKTk5WQkCBJio+P1+bNm80sDwDQgZl6JR2bzaaMjAxlZGQ0eqy0tNRwzPjx4zV+/PiTXRoAoIPjwz4AAAwQkAAAGCAgAQAwQEACAGCAgAQAwAABCQCAAQISAAADBCQAAAYISAAADBCQAAAYICABADBAQAIAYICABADAAAEJAIABAhIAAAMEJAAABghIAAAMEJAAABggIAEAMEBAAgBggIAEAMAAAQkAgAECEgAAAwQkAAAGTA3ImpoazZo1S3FxcYqPj1dWVlaTfT/99FPdcMMNGjBggH7/+9+ruLi4HSsFAHQ0pgZkZmamiouLlZ2drblz52rx4sXasmVLo36VlZWaOnWq4uLitH79esXExOjOO+9UZWWlCVUDADoC0wKysrJSubm5Sk1NVXR0tEaOHKkpU6YoJyenUd/NmzfL399fDz30kHr37q3U1FSdc845hmEKAEBbMC0gS0pK5HQ6FRMT426LjY3V3r17VVdX59F37969io2NlY+PjyTJx8dHl1xyifbs2dOeJQMAOhCrWSt2OBwKDg6Wn5+fuy00NFQ1NTWqqKhQSEiIR98+ffp4jO/atav279/f7PXV19dLkmpra2WxWFpct8ViUeR/nSP/lk8BNNuF3c6Ry+WSy+UyuxRDvB7Qntri9dAwtiETjse0gKyqqvIIR0nu5dra2mb1/c9+x9OwV/rpp5+2pFwPN/WW1PvsVs8DnFj9KX+khNcD2k/bvR7+80ilEdMC0t/fv1HANSwHBAQ0q+9/9jseq9Uqu90uX19f96FaAEDHUl9fr7q6OlmtJ44/0wIyLCxM5eXlcjqd7kIdDocCAgIUFBTUqO8PP/zg0fbDDz/o3HPPbfb6fH19G+2FAgDQFNNO0omMjJTVavXYXS4oKHDv5f27AQMGaPfu3e5jxvX19frkk080YMCA9iwZANCBmBaQNptNiYmJSktLU2FhofLz85WVlaWkpCRJx/Ymq6urJUmjRo3SoUOH9Nhjj+nAgQN67LHHVFVVpdGjR5tVPgDgDOdT35xTeU6SqqoqpaWlaevWrQoMDNTkyZN12223SZIiIiI0f/58jR8/XpJUWFiouXPn6rPPPlNERITS09MVFRVlVukAgDOcqQEJAMCpiouVAwBggIAEAMAAAQkAgAECEoYiIiIUERGhsrKyRo+98MILioiI0KJFiyRJixYtUv/+/Q0v/Tds2DCtX79ekrRr1y5FRER4PP7aa69p3LhxstvtGjRokO677z599dVXkqRvvvnGXYfRv4kTJ7b1j40O7Oeff9YTTzyhYcOGacCAARo9erTWrFnjvuLKzJkzNXPmTHf/prbLBx54wGPeYcOGaejQoY0ubWa0fUdHRys+Pl6PPPJIs68U9uqrrxq+FtasWaMhQ4YoJiZGs2bNUlVVlbdPSYdn2oUCcOo766yztG3bNt16660e7fn5+Y2uRnT06FGlp6fr+eefb/b8+fn5mjt3rtLT0zVgwAAdOnRIS5cu1a233qrXX39d5513nt577z13/+uvv1633367xowZ464PaAvl5eX6wx/+oHPPPVePPfaYevbsqaKiIj3yyCM6ePCgZs+ebThu0aJFHjdckDyvBLZ7925VV1erurpau3bt0uDBgxvNkZubq/POO0/SsXvkfvTRR5o7d66Cg4M1ffr049b94Ycfas6cObLb7R7tb7zxhhYvXqwnn3xSXbt2VUpKip588knNmTOnWc8HjiEg0aS4uLhGAXn48GHt3r270VdswsLCtHv3buXl5SkxMbFZ8+fl5Wn8+PEaO3asu23hwoUaPHiw3n77bV199dXq1q2b+zGLxaJOnTp5tAFtYeHChfLz89Pq1avl7+8vSTr//PMVEBCgadOmNfojsUHnzp2Puz1u2rRJcXFxOnr0qPLy8gwDMiQkxGOOnj176pNPPlF+fv5xA3Lx4sVavny5LrjggkaPPffcc5o0aZKGDh0qSUpPT9fkyZP14IMPymazNTknPHGIFU0aPny4PvroIx0+fNjdtmPHDsXFxemcc87x6BseHq5bb71VmZmZOnToULPm9/X11d69e3XkyBF3m7+/v/Ly8nTllVe2zQ8BnEBtba02bdqkW265xR2ODYYOHao1a9aoR48eXs9bV1enLVu2KC4uTkOHDtUbb7zR7Ju8+/n5nfCuQzt37tTq1auVkJDg0e5yuVRUVKS4uDh328CBA3X06FGVlJR4/XN0ZAQkmtS3b1+FhYXpnXfecbe9+eabGjFihGH/5ORkWa1WLVy4sFnz33zzzSouLtbvfvc7/fnPf1Zubq6+++47hYeHKzAwsE1+BuBEvv76a1VWVjY6TCkdu/fs4MGDW3Qd5127dsnhcGjo0KEaOnSoqqurtXXr1uOOqa+v165du7Rx40ZdddVVx+37wgsv6LLLLmvUfujQIdXU1Hhcq9pqtapLly769ttvvf45OjICEsc1fPhwbdu2TdKxv7R37typ4cOHG/YNDAxUSkqKXnrpJRUWFp5w7sGDBysnJ0eDBw/Wtm3b9PDDD2vo0KGaN29es25FA7SFhiMenTp18nrsHXfcoZiYGPe/YcOGuR977bXXFBERofPPP1/dunXTwIED9corrzSaY+zYse7x/fv31wMPPKCkpCRNnjy5RT9PwyU6W3uLQPAZJE5g+PDhuvfee+V0OvXBBx+ob9++6tq1a5P9R48erZdffllpaWnKzc094fwxMTFasmSJ++SEvLw85eTkqFevXu7LDgInU5cuXSQdO4vVW48++qjHTRMabrRQW1urN9980+Ozy4SEBGVkZKisrEzdu3d3t69YsUJhYWEqKyvTvHnz1K9fP911113uQ6xz5szRxo0b3f03bdrkMf4/NRwmNrpFIJ8/eoc9SBxXbGyspGN3WsnPz9fIkSNPOGbOnDk6cOCA/vd//7fJPkeOHNG8efPch3z8/f01ZMgQLVy4UGPGjNH777/fNj8AcAK9evVSp06dtG/fPsPH77777ia3x7CwMIWHh7v/nX/++ZKkd999Vz///LOWLl2qqKgoRUVFKTMzU/X19dqwYYPHHN27d1d4eLguv/xyLV++XDt27FBGRob78fvuu095eXnufye6zV+XLl3k7+/vcYtAp9OpiooKTnDzEgGJ47Jarbryyiu1bds2bd++vcnPH/9deHi4pk6dqmeeecbjBJ9/FxAQoI0bN2rLli2NHuvUqZNCQkJaXTvQHFarVWPGjFFOTk6jva5t27Zp27ZtXt17VpI2b96sCy+8UBs2bHAH24YNG3TppZcqLy+vyXG9evVScnKynn/+ee3du1eS1LVrV48QPtGNfn19fWW321VQUOBu27Nnj6xWq/r16+fVz9HREZA4oeHDhys3N1ddu3Z1/4V8IlOnTlVISEiTh60sFovuuusuPfXUU1qxYoU+//xz/fOf/9SaNWu0cePGJk+rB06G5ORkHT58WJMnT9ZHH32kr7/+Wrm5uZo5c6aSkpLUp0+fZs9VVVWlbdu26frrr1ffvn09/t1yyy368ssvtXv37ibHJyUlqXfv3q36LP7mm2/W6tWrlZ+fr8LCQqWlpWnChAkcYvUSn0HihOLj4+V0Opu199jAz89Pc+bMOe6JBpMnT1bnzp31wgsvaOnSpZKk/v37a+XKlerfv3+r6waaq1u3bnrhhRe0aNEiPfDAA6qoqFCvXr1077336qabbvJqrm3btuno0aOG3wceMWKEunXrpldeeUVTp041HG+1WvXwww/rtttu07p163TDDTd4/fNcffXV+te//qU5c+aotrZWCQkJevDBB72ep6PjdlcAABjgECsAAAYISAAADBCQAAAYICABADBAQAIAYICABADAAAEJAIABAhIAAAMEJAAABghIAAAMEJAAABggIAEAMPD/MfeoWrgV95MAAAAASUVORK5CYII="
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Lenovo\\AppData\\Local\\Temp\\ipykernel_15704\\241295519.py:16: UserWarning: Glyph 28151 (\\N{CJK UNIFIED IDEOGRAPH-6DF7}) missing from font(s) Arial.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\Lenovo\\AppData\\Local\\Temp\\ipykernel_15704\\241295519.py:16: UserWarning: Glyph 28102 (\\N{CJK UNIFIED IDEOGRAPH-6DC6}) missing from font(s) Arial.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\Lenovo\\AppData\\Local\\Temp\\ipykernel_15704\\241295519.py:16: UserWarning: Glyph 30697 (\\N{CJK UNIFIED IDEOGRAPH-77E9}) missing from font(s) Arial.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\Lenovo\\AppData\\Local\\Temp\\ipykernel_15704\\241295519.py:16: UserWarning: Glyph 38453 (\\N{CJK UNIFIED IDEOGRAPH-9635}) missing from font(s) Arial.\n",
      "  plt.tight_layout()\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 28151 (\\N{CJK UNIFIED IDEOGRAPH-6DF7}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 28102 (\\N{CJK UNIFIED IDEOGRAPH-6DC6}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30697 (\\N{CJK UNIFIED IDEOGRAPH-77E9}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 38453 (\\N{CJK UNIFIED IDEOGRAPH-9635}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 1200x500 with 2 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABBYAAAHqCAYAAACwSs1vAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAABAlElEQVR4nO3dfZyc870//vfMbLKbe0SUxBFSkRJxmyCaVISWqqq2qtE2hB4p1Tr06EEQNK0gqj2V4qfk8D18UTdVDi3toYqT45SKiooTEtQ3qlGSkptNdmZ+f7BbcZfdaz/j2rHP5+OxYmd23vOez14z13tec81soVqtVgMAAAAgg2LeDQAAAAD1S7AAAAAAZCZYAAAAADITLAAAAACZCRYAAACAzAQLAAAAQGaCBQAAACAzwQIAAACQmWABAAAAyEywAO9g8uTJMWLEiJg0adK7/syJJ54YI0aMiFNOOaXttIkTJ8Yuu+wSS5YsecfLjBgxIi666KK270855ZSYOHHiOj+zcuXKuOiii+KAAw6IHXbYIXbdddeYNGlS3HDDDVGtViMi4vnnn48RI0as9+vBBx/szDIAAN3EY489Ft/+9rdjwoQJscMOO8S+++4bZ5xxRvzpT39a5+cuuuiiGDFiRNv365tJDjzwwHUuX6lUYsKECTFixIiYP3/+O/YyceLEt9XZdtttY8yYMfGlL30pfvvb33botrW0tMShhx66zgzWasWKFXH22WfHRz/60dh5553j6KOPjkWLFnWoPhDRkHcD0FUVi8WYN29e/PnPf45NN910nfNWrlwZ99xzzztebsWKFXH66afHnDlzOnyd1Wo1jjnmmFi0aFFMnTo1hg8fHs3NzXH//ffHGWecEQsXLoxp06bFJptsEtdff33b5ZYuXRrf+MY34thjj40JEya0nb711lu/63Wdd95579nLuHHj4qMf/Wjb9w888EDcf//973mZk08++X2/DgCgc6655po455xzYvfdd49//ud/jk022SSeffbZuOKKK+Kuu+6Kq666Kj7ykY+8Z423ziCtmpqa1vn+gQceiJdeeimGDRsW1113XXz3u999x3p77bVXfP3rX2/7vqWlJZ577rm47LLL4utf/3rceOON6+0pIqK5uTn+5V/+JR599NEYP378287/53/+53j00Ufj29/+dvTt2zdmz54dhx9+eNx+++0xYMCAd617xx13xGOPPfau5w8YMCCOOeaYtu/L5XKcddZZ0bdv33e9zAEHHBCjRo16X68DUhEswLvYbrvt4qmnnopf/vKXMWXKlHXOu+eee6JXr17Rv3//t12uf//+8cADD8RPf/rTOPTQQzt0nQ8//HA8+OCDMWfOnHWecE+YMCGKxWJcffXVcfTRR8egQYNip512ajv/+eefj4iILbbYYp3T38v48eNjzz33fNfz/+u//mud7wuFwns+qX/rz79f1wEAZPfwww/H9773vfjyl78cp512Wtvpu+++e+y7775x8MEHx7Rp0+Lmm29+zzrtnUFuvvnm2HnnnWP8+PFxySWXxCmnnPKOT4Q32mijt9UbPXp07LjjjnHAAQfErbfeut5g4aGHHorvfOc78eKLL77j+Y888kjcc889cdlll8Vee+3Vdh377LNP/N//+3/j2GOPfdfaG2ywQYdmlmq1GgceeGDsvvvu7b7M+3EdkIq3QsC76N27d+y1117xy1/+8m3n3XHHHbHffvtFQ8Pbs7mJEyfGbrvtFuedd1688MILHbrOpUuXRsTrhwm+1Ze+9KU48cQTo1AodKgmAMC7ueKKK6Jfv37xrW99623nbbTRRnHKKafEPvvsEytXruz0dS1fvjx+/etfx9577x0HHnhgrFq1Kn7+8593qEbrizrtmYeOPfbYGDx48LuGIvfff3/07t07xo0b13baRhttFGPGjIl77723Q31BdydYgPdwwAEHtL0dotVrr70Wv/3tb9/2nsFWhUIhzjnnnKhUKnH66ad36Pp222236N27d3zrW9+KWbNmxYMPPhirV6+OiIgtt9wyjj766Nh4442z3yAAgDdUq9W4//77Y+zYsdGrV693/JkDDjggjjvuuOjdu/d71qpUKtHS0rLOV7lcXudnbrvttiiXy/HpT386Bg8eHHvsscc6b+18a29vrrVq1apYsGBBnHzyydGjR493ncPe7Oqrr45LL700hgwZ8o7nP/3007H55ptHqVRa5/QtttgiFi9evN76wN8JFuA9TJgwIXr16rXOUQu/+tWvYuDAgbHrrru+6+X+4R/+Ib71rW/F/fffHzfccEO7r2/gwIHxk5/8JAYMGBCXX355HH744TF69Oj4yle+Ej/96U/ftoMGAMjqlVdeiebm5th88807Xeu0006LkSNHrvP11rcy3HzzzfGxj30sBg0aFBERn/vc5+LJJ5+M3//+92+rd8stt7yt1uc///lYsWJFXHHFFbHtttuut6c3f8jkO3n11Vff8W0Yffr0iRUrVqy3PvB3PmMB3kNTU1NMnDhxnc9ZuP322+OTn/zkeg/B+8pXvhJ33nlnnHvuuTF+/Pi3fQDkuxk9enTcdddd8fDDD8f9998f//M//xPz5s2L3/3ud3HLLbfEnDlz3vZBSAAAHdX6Sn2KFy6+8Y1vvO3DG4vFv7+GuWDBgnj88cfjK1/5Svztb3+LiIg99tgjevfuHddff33ssssu61x27733juOOOy4iIp577rmYNWtWfOhDH4rZs2e3BROtvbf+1ayI148cfesRCO/mzZd7K289hY5xxAKsxyc/+cm2t0O88sorMXfu3PjUpz613su1viWiXC53+C0RxWIxxowZEyeeeGJce+218cADD8Rhhx0WDz/8cNx4441ZbwoAQJsBAwZEnz593vXPZEe8/pewli9fvt5aQ4YMiVGjRq3zNXLkyLbzW+eXU089NcaMGRNjxoyJ8ePHx8qVK+MXv/jF265jgw02aKvzqU99Ki6//PJYsGBBHH300bFmzZq2n5syZco6Rza89QO330vfvn3f8ciEFStWRL9+/dpdB3DEAqzXxz72sejTp0/88pe/jN69e8fmm28e22+/fbsuu8UWW8SJJ54Y55xzTrsCgRNOOCGWLVsWV1555TqnDxgwIKZPnx533HFHPPXUU1luBgDA24wbNy4efPDBaG5ujsbGxred/9Of/jTOO++8uPHGG9cJCjpizZo1cdttt8UnPvGJ+MpXvrLOec8//3xMmzYtfvazn71nKLD11lvH8ccfH+eff37Mnj277cMmzz777HXCgT59+rS7r6222iruv//+qFQq6xxd8eyzz8aHP/zhdtcBHLEA69WzZ8/Yd999484774xf/OIX7Tpa4c0mT54cu+66a5x77rnr/dmhQ4fGf//3f8e8efPedt5f/vKXWLlyZWyzzTYdun4AgHdz1FFHxbJly+KHP/zh285bunRpzJkzJ7beeuvMoUJExN133x3Lli2LSZMmxe67777O1+c///nYcsst3/VDHN/siCOOiG222SbmzJkTzzzzTEREDBs2bJ2jJIYNG9buvsaNGxcrVqyI++67r+20l19+OR566KF1/uw3sH6CBWiHAw44IB555JF48MEHOxwsFIvFmDlzZqxdu3a9P3vUUUfFhz/84TjyyCNj1qxZ8dvf/jZ+97vfxTXXXBNf/vKXY/jw4fG5z30u680AAFjHTjvtFP/0T/8Uc+bMialTp8Ydd9wRc+fOjf/zf/5PHHLIIdHc3PyOoUNH3HTTTTFw4MDYY4893vH8gw46KBYtWhQPPvjge9ZpaGiIadOmxdq1a+Occ87pVE8REWPGjInddtstvv3tb8cNN9wQv/rVr2LKlCnRr1+/OOywwzpdH7oTb4WAdthzzz2jf//+sdlmm2U6NG7o0KFx4oknxsyZM9/z5wYMGBDXX399/OQnP4m77747rr322li7dm0MGTIkDjzwwJg6dWqyD26844471kno32qHHXZY5/vly5fHeeed964//+qrr8aee+75vl8HANA5xx57bGy33XZxzTXXxDnnnBPLly+PzTbbLCZMmBDHHHNMbLbZZplrv/jii/HAAw/EpEmT3vVDFT/zmc/ERRddFNddd13svvvu71lv7Nixsd9++8Wdd94Z99xzT+y9996Ze4uImD17dpx77rlx/vnnR6VSiV122SV++MMfxoABA97zcs8999x7zjiFQuFtM8u1114bv/nNb971MuPHj3/frwNSKVTf6+NQAQAAAN6Dt0IAAAAAmQkWAAAAgMwECwAAAEBmggUAAAAgM8ECAAAAkJlgAQAAAMisIe8GsqpUKtHS0hLFYjEKhULe7QBQ56rValQqlWhoaIhiUe5O/TEbAZBSR2ajug0WWlpa4rHHHsu7DQA+YEaNGhU9e/bMuw3oMLMRALXQntmoboOF1sRk5sNrY02l8/V6FiNO3bVHsnqtrj1yTLpidaBcLsfCJx6L4duOilKplHc7dckadl6t1rBcqSarVSulYppXKbvjdth6mx2tQL1q3XYPPun6WLl6bafr9W7qEbdc8MVk9Vo995sLktWqhaf+/GrSetVKJcovL47SRltFIdHjy9ab9ktSp5ZeW5Vum6lUyrFk8YIYvNVHolhMs0/q26tHkjq19PJrzclqVSrleOm5/42Nt9gm2RpGRPRt6vrr+PPHn09WqxjVGFl6JR4vbxiVSDNzfWbk5knq1EKlXI5nFj7ertmoboOF1kP81lQimsvp6qau110G8rcqlUrd9ranYg07L/kaFrpPsNBWrxtuhw4hp161brsrV69NGgSkrtfVH1MKCZ90rVu3mKx2V1/DiIhiKeErda01i6UoJrrtdbGGNdgWi8VS0rr1sI6VpB8rWHnjv4VkdethDdszG3lZBgAAAMhMsAAAAABkJlgAAAAAMhMsAAAAAJkJFgAAAIDMBAsAAABAZoIFAAAAIDPBAgAAAJCZYAEAAADITLAAAAAAZCZYAAAAADITLAAAAACZ5RosNDc3x7Rp02L06NExbty4mDNnTp7tAADkymwEQD1qyPPKzz///Jg/f35cddVVsWTJkjj55JNj8ODBsf/+++fZFgBALsxGANSj3IKFlStXxg033BA/+clPYuTIkTFy5MhYuHBhXHPNNXaeAEC3YzYCoF7l9laIBQsWREtLS+y8885tp+26667x6KOPRqVSyastAIBcmI0AqFe5BQtLly6NDTfcMHr27Nl22sYbbxzNzc2xbNmyvNoCAMiF2QiAepXbWyFWrVq1zo4zItq+X7NmTbvr9EwUjbTWSVWvVblcTluwi2u9vd3tdqdkDTuvVmtYrlST1quJaiFJme64HXan20rXlGo26t3UI0k/rXVS1WvV1e9r1Ura/qpvHG1STXjUSVdfw4iISsIeK2/8TioJfzflctf/43gpb28t1jCiPtaxGOnue8WovunfNHW78v25I/fj3IKFxsbGt+0kW79vampqd51Td027s0tdb8H8eUnr1YuFTzyWdwt1zxp2njXsPGsI759Us9EtF3wxaV+p63XX2aj88uJktRa8lKxUXVmyeEHeLdS9l57736T1/pK0Wm2MKqWvObL0SrJaixa8nKxWnnILFj70oQ/FK6+8Ei0tLdHQ8HobS5cujaampujfv3+768x8eG2sSRAW9Sy+Hiqkqtfq2iPHpCtWB8rlcix84rEYvu2oKJVqcC/uBqxh59VqDevhiIVSMd0RC91tO2y9zZCXVLPRwSddHytXr+10P72besQtF3wxWb1Wz/3mgmS1auGpP7+atF61Uonyy4ujtNFWUSimeXV36037JalTS6+tSrfNVCrlWLJ4QQze6iNRLKbZJ/XtlfbFxFp4+bXmZLUqlXK89Nz/xsZbbJNsDSMi+iY+oqkWfv7488lqFaMaI0uvxOPlDaMSaWauz4zcPEmdWqiUy/HMwsfb9bO5BQvbbrttNDQ0xLx582L06NEREfHwww/HqFGjotiBB901lYjmhEePpK7X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Plj40Ic+FK+88kq0tLREQ8Pry7F06dJoamqK/v3759xdfZkxY0Zce+21MWvWrNhvv/3ybqeu3H777fHSSy+1vZ+1dYC7884745FHHsmztboyaNCgaGxsbNtxRkRstdVW8cILL+TYVX2ZP39+DB06dJ0nD9ttt11ceumlOXYFvJ/MRumYjbIzG6VhNuo8s1H7dPtgYdttt42GhoaYN29ejB49OiJe/5CTUaNGRbHY7T+Cot1mz54d1113XVx44YX+FFUG//7v/x4tLS1t319wwQUREXHSSSfl1VJd2nHHHaO5uTkWL14cW221VUS8/sncb96Z8t422WSTePbZZ2PNmjVthz4vWrQoNt9885w7A94vZqM0zEadYzZKw2zUeWaj9un2e4devXrFwQcfHGeddVb84Q9/iF//+tcxZ86cOPzww/NurW48/fTTcfHFF8fRRx8du+66ayxdurTti/YZMmRIDB06tO2rT58+0adPnxg6dGjerdWVYcOGxYQJE+LUU0+NBQsWxH333ReXXXZZHHbYYXm3VjcmTpwYPXr0iNNPPz0WL14cd999d1x66aUxefLkvFsD3idmo84zG3We2SgNs1HnmY3ap1CtVqt5N5G3VatWxVlnnRV33XVX9O3bN7761a/GlClT8m6rblx22WXx/e9//x3Pe/LJJ9/nbj4YTjnllIiIOPfcc3PupP68+uqrMWPGjPjVr34VvXr1ii996Utx3HHHRaFQyLu1uvHUU0/F9773vfjDH/4QG220UXz5y1+OI444whpCN2I26hyzUXpmo+zMRp1nNlo/wQIAAACQWbd/KwQAAACQnWABAAAAyEywAAAAAGQmWAAAAAAyEywAAAAAmQkWAAAAgMwECwAAAEBmggUAAAAgM8EC5GDixIkxYsSItq+RI0fG/vvvH1deeWWy65g8eXJcdNFFERFxyimnxCmnnLLey6xZsyZ++tOfZr7Om2++OSZOnJj58gBA92Q2gvrWkHcD0F1NmzYtDjjggIiIaGlpif/+7/+O0047LTbYYIM4+OCDk17Xaaed1q6fu/322+PSSy+NQw89NOn1AwCsj9kI6pcjFiAn/fr1i0GDBsWgQYNis802i89+9rMxduzYuOuuu2pyXf369Vvvz1Wr1eTXDQDQHmYjqF+CBehCGhoaokePHjF58uSYMWNG7LPPPjFhwoR47bXX4oUXXohjjjkmdtxxx5g4cWLMnj07yuVy22V/9atfxX777Rc77bRTfOc731nnvLce7vfzn/889t9//9hxxx1j0qRJ8cc//jEefPDBOPXUU+P//b//FyNGjIjnn38+qtVq/PjHP45x48bF6NGj45hjjoklS5a01XnxxRfjH//xH2OnnXaKz372s/Hcc8+9PwsFAHQLZiOoD4IF6ALWrl0bd911VzzwwAOxzz77RMTr78mbNWtWzJ49O/r06RPf+MY3YuDAgfGzn/0sZs6cGbfddltceumlERHx1FNPxQknnBCHHXZY3HTTTdHS0hIPP/zwO17XfffdF6eddlocccQRceutt8b2228fX/va12LnnXeOadOmxaabbhr3339/bLbZZnH11VfHbbfdFt///vfj+uuvj4EDB8ZRRx0Va9eujYiIf/qnf4pKpRI33HBDHH300XHVVVe9PwsGAHygmY2gvviMBcjJmWeeGTNmzIiIiNWrV0dTU1McccQRcdBBB8UNN9wQEyZMiF122SUiIubOnRtLliyJG264IYrFYgwbNixOPvnkOPXUU+O4446Lm266KUaPHh1TpkyJiIgzzjgj7rnnnne83uuvvz4OPPDAOOywwyIi4l/+5V+iR48esXz58ujXr1+USqUYNGhQRERcfvnlceaZZ8buu+8eERHf+c53Yty4cXHffffFP/zDP8QjjzwS99xzTwwePDiGDx8e8+fPj1/+8pe1XDYA4APKbAT1S7AAOTn++OPjE5/4RERENDY2xqBBg6JUKrWdP2TIkLb/f/rpp2PZsmWx6667tp1WqVRi9erV8corr8TTTz8d2267bdt5PXr0WOf7N1u8eHFMmjSp7fuePXvGySef/LafW7FiRfz5z3+OE088MYrFvx/ctHr16njmmWeiubk5Nthggxg8eHDbeaNGjbLzBAAyMRtB/RIsQE4GDhwYQ4cOfdfzGxsb2/6/paUlhg0bFhdffPHbfq71g4fe+uFCPXr0eMe6DQ3tu9u3vg/xX//1X2OrrbZa57wBAwbE3Llz232dAADrYzaC+uUzFqAObLXVVrFkyZLYaKONYujQoTF06NB4/vnn40c/+lEUCoUYPnx4PPbYY20/X6lUYsGCBe9Ya+jQoeucVy6XY+LEifHwww9HoVBoO71///4xcODAWLp0adt1brbZZjFr1qxYvHhxbLPNNrF8+fJ49tln2y7zxBNP1ODWAwCsy2wEXYtgAerAuHHjYsiQIfHtb387nnzyyXjooYfijDPOiF69ekWpVIpDDz005s+fH5dcckksWrQozjvvvHU+ofjNJk+eHLfeemv87Gc/i2effTZmzpwZ1Wo1Ro4cGb169Yrly5fHM888Ey0tLTFlypT44Q9/GHfffXc888wzcfrpp8fvf//7GDZsWHz4wx+OsWPHxrRp02LBggXx61//Oq6++ur3eWUAgO7IbARdi2AB6kCpVIpLLrkkKpVKHHroofHNb34z9tprrzj99NMj4vWk/ZJLLonbb789Dj744Fi6dGnstdde71hrzJgxceaZZ8aPf/zjOOigg+KJJ56ISy+9NJqammKPPfaIoUOHxqc//el44okn4qtf/WoccsghMX369Dj44INjyZIlccUVV8SAAQMiIuIHP/hBbLjhhjFp0qS48MILY/Lkye/bmgAA3ZfZCLqWQvWtbwQCAAAAaCdHLAAAAACZCRYAAACAzAQLAAAAQGaCBQAAACAzwQIAAACQmWABAAAAyEywAAAAAGQmWAAAAAAyEywAAAAAmQkWAAAAgMwECwAAAEBmggUAAAAgs/8faDCWiagoFdMAAAAASUVORK5CYII="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 5
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
